//////////////////////////////////////////////////////////////////////////

#ifndef _NETWORKFACTORY_H_
#define _NETWORKFACTORY_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _IACCEPTOR_H_
#include "iacceptor.h"
#endif

#ifndef _ISERVERCONNECTION_H_
#include "iserverconnection.h"
#endif

#ifndef _ICLIENTCONNECTION_H_
#include "iclientconnection.h"
#endif

#include <boost/shared_ptr.hpp>

//////////////////////////////////////////////////////////////////////////


/** [Utility type]: a shared pointer to server connection */
typedef boost::shared_ptr<IServerConnection> ServerConnectionPtr;


/** [Utility type]: auto pointer to acceptor */
typedef std::auto_ptr<IAcceptor> AcceptorPtr;


/** [Utility type]: auto pointer to client connection */
typedef std::auto_ptr<IClientConnection> ClientConnectionPtr;


//////////////////////////////////////////////////////////////////////////



/** Factory provider for all network interfaces
*
*  @author   Pasechnik Roman
*  @since    Jan 13th, 2010
*  @updated  Jan 13th, 2010
*/
class NetworkFactory
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Creates server acceptor */
    static AcceptorPtr GetAcceptor( int _port );


    /** Creates server connection */
    static ServerConnectionPtr GetServerConnection( int _ID, const AcceptorPtr& _acceptor );


    /** Creates client connection */
    static ClientConnectionPtr GetClientConnection();


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
